home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 41
/
Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso
/
Aminet
/
misc
/
sci
/
Denise4_2.lha
/
Denise4_2
/
source
/
main.c
Wrap
Text File
|
2000-11-04
|
49KB
|
1,331 lines
/*
Denise-MYTH Artificial Intelligence.
Copyright (C) 2000 Szymon Jessa
WERSJA ANGIELSKA:
This program is free software; you can redistribute it and/or modify it under the terms of the GNU
General Public License as published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not,
write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
WERSJA POLSKA:
Niniejszy program jest oprogramowaniem wolnodostëpnym; moûesz go rozprowadzaê dalej i/lub
modyfikowaê na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez Fundacjë Wolnodostëpnego
Oprogramowania - wedîug wersji 2-giej tej Licencji lub którejô z póúniejszych wersji.
Niniejszy program rozpowszechniany jest z nadziejâ, iû bëdzie on uûyteczny - jednak BEZ
JAKIEJKOLWIEK GWARANCJI, nawet domyôlnej gwarancji PRZYDATNOÔCI HANDLOWEJ albo PRZYDATNOÔCI DO
OKREÔLONYCH ZASTOSOWAÏ. W celu uzyskania bliûszych informacji - Powszechna Licencja Publiczna GNU.
Z pewnoôciâ wraz z niniejszym programem otrzymaîeô teû egzemplarz Powszechnej Licencji Publicznej
GNU; jeôli nie - napisz do Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
KONTAKT:
snail: Szymon Jessa, ul. Warszawska 20/6, 89-600 Chojnice,
email: smoczek@ue.eti.pg.gda.pl (ew. noco@box43.gnet.pl)
phone: (052) 39-707-88
****************************************************************************************************
*/
// Denise-MYTH 4.2 (00.11) by Ivanhoe/Quality^PAT
// 16.08.2000 -> 04.11.2000
/*
* * *
Denise-MYTH 4.2
Maksymalne rozumienie przy minimalnej logice.
* * *
hmmm... ochota, ûeby spojrzeê na warsztat pracy? proszë bardzo...
* * *
Denise-MYTH 5.0
INTELIGENCJA LOGICZNA
LOGIC INTELLIGENCE
Inteligencja Logiczna.
Maksymalna ekstracja danych za pomocâ funkcji LOGICZNYCH.
Rozwiâzywanie prostych problemów logicznych.
PLANOWANA PUBLIKACJA WERSJI 5.0: 01.07.2001.
pierwszy lipca, 2001 roku
* * *
ulepszyc odpowiadanie na pytania: czasem lepsze sa odpowiedzi krotkie, czasem dluzsze,
okreslic kiedy <- zwieksza naturalnoôê odpowiedzi Denise,
zaproponowaê komuô do zrobienia róûne bazy Elizy dla róûnych stanów emocjonalnych:
NASTAWIENIE_POZYTYWNE, NASTAWIENIE_OBOJETNE, NASTAWIENIE_NEGATYWNE
KONIECZNIE zmienic baze faktow - ma byc zapis neuronowy - sieci, podobnie jak u
czlowieka!
Denise-MYTH 5.0. - KOMPLETNIE PRZEPISAC PROGRAM na podstawie literatury o DUZYCH PROGRAMACH,
wersja 5.0 ma mieê MUI albo GUI na Amidze, ma byê pod PC Windows, oraz pod
Linux'a, ma byê multi-user i w ogóle ma byê High End - ponad 10.000 sîów w bazie,
ponad 1.000 faktów ogólnych o ôwiecie, wiedza ogólna z zakresu szkoîy,
5.0:
ogólna struktura KAÛDEGO zdania:
- treôê oryginalna, wynikowe, do wypisania, lub pobrana, oryginaî,
- treôê uproszczona, przefiltrowana od wtrâceï, czysta informacja, poprawna
gramatycznie, moûe byê po ekstrakcji, úródîo, rzeczywista informacja,
- zestaw danych fleksyjnych o zdaniu, poszczególnych wyrazach podstawowych,
w postaci ostatecznej, dla której istnieje poprawny rozbiór logiczny,
dotyczy to wszystko treôci uproszczonej!
- informacje o grupach, wyrazach dominujâcych, pierwszy etap rozbioru zdania,
- dane rozbioru logicznego zdania, operujâ na wspóîrzëdnoôci grup, i funkcjach,
- informacje o typie zdania, typie podmiotu itp.
DOPIERO W WERSJI 5.0
TEORIA EKSTRAKCJI
TEORIA EXTRA - do konca wrzeônia, teoria, analiza, poprawki w programie,
NOWE: Denise o maîej logicznoôci - odpowiadanie twierdzeniami na twierdzenia,
jeôli np. "czego stolicâ jest ryga?" <- nie rozumiemy zdania, ale "ryga" i
"stolica" sâ w bazie faktów, wiëc moûna odpowiedzieê, ûe "ryga to stolica" <-
chociaû tyle!!!
TERAZ: spacjalny moduî zamiany imienia Denise na jakiekolwiek inne, np. change name
"sylwia" - od tej pory WSZËDZIE w programie denise jest sylwiâ, ale w bazie
zapis jest jako "denise" (zmiany w bazie Elizy, odmianie i w ogóle WSZËDZIE)
teoria:
...
- ma byê jak najbardziej ogólna: ma akceptowaê TAK SAMO odpowiedzi do wypowiedzi
Denise jak równieû Elizy,
- nie definiuje ûadnych dodatkowych zmiennych globalnych,
- funkcja ma dziaîaê w nowy sposób:
- podaje sië po prostu dwa parametry:
- zdanie pierwsze, (jako zdanie DENISE)
- zdanie drugie, bëdâce odpowiedziâ na pierwsze, (jako zdanie ROZMÓWCY)
- funkcja zwraca jeden parametr:
- zdanie drugie ewentualnie przeksztaîcone zgodnie z zasadami ekstrakcji,
algorytm dziaîania funkcji:
// funkcja typu BETA - uproszczona, dostosowana do konstrukcji 4.2
void extra_main(char *question_orig,char *answer_orig,char *result_orig);
- question_orig, answer_orig - dowolne zdania, w formie naturalnej,
- przetransformowanie zdaï na postaê podstawowâ, przefiltrowanâ od wtrâceï,
-
- pobranie fleksji wszystkich wyrazów
- okreôlenie typu odpowiedzi i pytania,
- odpowiednie modyfikacje,
BARDZO WAZNE: zmieniê wnioskowanie dziedziczone na jakâô profesionalnâ funkcjë!
a teraz to jest czysta chaîa!
SUPER EKSTRAKCJA: zaimki!!!! jesteô miîy? TAKI jestem -> jestem miîy itp.
...
- po fleksji i przed skîadniâ,
- pytanie i odpowiedú - nie koniecznie muszâ to byê faktyczne pytania i odpowiedzi!
- przypadki:
- odpowiedú nie zawiera czasownika, (np. "czîowiekiem", "miîâ osobâ", "tak", "nie"),
- pytanie byîo ogólne ("kim jesteô?")
- WARUNKI STOSOWALNOÔCI:
- zgodnoôê zaimka z podanym wyrazem,
- zgodnoôê osób: pyt. TY -> odp. JA, pyt. JA -> odp. TY, pyt. ON -> odp. ON
- ewentualna zamiana osoby czasownika (ty->ja, ja->ty, on->on),
- wstawienie w miejsce zaimka odpowiedzi (w odpowiednim miejscu),
- odmiana zdania,
- ANALIZA LOGICZNA,
- pytanie byîo szczegóîowe ("jesteô czîowiekiem?")
- WARUNKI STOSOWALNOÔCI:
- akceptowalne sâ jedynie odpowiedzi potwierdzajâce lub zaprzeczajâce:
"tak", "nie", "to prawda", "to nie jest prawda" itp.
- ewentualna zamiana osoby czasownika,
- ewentualne modyfikacje z przeczeniem "nie",
- odmiana zdania,
- ANALIZA LOGICZNA,
- odpowiedú zawiera czasownik (np. "mam", "nie jestem"),
- WARUNKI STOSOWALNOÔCI:
-
- czasownik odpowiedzi i pytania sâ zgodne:
"czy masz samochód?" -> "nie mam"
- czasownik odpowiedzi i pytania sâ róûne:
- BRAK EKSTRAKCJI - nieporozumienie, albo nowy temat, nie istotne teraz,
* - ûeby rozmawiajâce ze sobâ Denise korzystaîy z MYTH a nie tylko Elizy
TERAZ: analiza budowy moduîowej, tj. tak jak simplerexx - doîâczaê tylko przy
linkowaniu, bez kompilacji wszystkich includów, zrobiê w ten sposób wszystkie
includy jako osobne podprogramy z niektórymi funkcjami wywoîywanymi z zewnâtrz -
umoûliwi to kompilacjë pod pc dos, i bëdzie duuuûo szybciej i profesjonalniej,
- stwierdzenia zamiast pytaï: np. "tak jak Zosia",
- rozumienie zdaï zîoûonych (poprzez dzielenie na zdania pojedyncze)
- kto jest studentkâ? albrecht to student <- nie rozpoznaje rodzajów!!!
- zwracanie uwagi, czy rozmówca mówi na temat, czy nie mówi bez sensu
- pytasz BO jesteô ciekawa???????
- problemy logiczne, proste twierdzenia matematyczne, przeprowadzanie dowodów,
wykonywanie róûnych operacji róûnymi narzëdziami, np. podaje sië denise
narzëdzia i mówi, co mogâ zrobiê, i pyta sië, czy moûna coô zrobiê, a ona
sprawdza, czy jest to moûliwe na podstawie tego co ma w bazie - tj. czy
informacje podane w bazie pozwalajâ wytworzyê zadanâ informacjë - kaûda operacja
jest informacjâ, np. "podnieô klocek" -> czy moûna sprawiê, aby prawdziwa
informacja byîa: "podniosîam klocek", czy "mogë podnieôê klocek" - realizacja
mogîaby byê programowo-sprzëtowa!!!!
- LOGIKA - czy zapis logiczny ma byê od razu z zapisem zdania, tj. "darek jest
uczniem andrzeja" i zapis: "andrzej ma ucznia darka", czy ma byc
wywnioskowywany na bierzaco?
TERAZ: a moûe byê b
TERAZ: sortowanie bazy faktów alfabetycznie, bëdzie duûo szybsze wyszukiwanie faktów
w bazie, mother fakt itp.
- NOWA GRAMATYKA - patrzeê do materiaîów na pececie, z pîytki, orzeczenia
zîoûone
- zdania definicyjne: czytam BO lubië czytaê <- jaki zapis, jaki rozbiór itp.
TERAZ: przyôpieszenie mapy korelacji poprzez jej sortowanie alfabetyczne i
koïczenie, jeôli pierwsza literka jest dalsza niû szukanego wyrazu (jak we
fleksji). sprawdziê, czy to przyôpiesza?
TERAZ: odmienianie w liczbie mnogiej w sâsiedztwie liczebników (dwie rëce nie REKA)
TERAZ: udoskonalenie odpowiadania na pytania ogólne: "kim jesteô?" itp. do
odpowiedzi wybieramy fp, który ma najmniej faktów unknown, tj. staramy sië daê
odpowiedú bëdâcâ odpowiedziâ na najwiëcej pytaï, ALE: nie dajemy zawsze tej
odpowiedzi - losujemy zgodnie z prawdopodobienstwem okreôlonym poprzez liczbë
fp unknown. powinno to teû zaleûeê od stosunku do rozmówcy - albo mówimy mu duûo
i dobrze, albo jak najmniej.
- jeôli: denise lubi ludzi; a darek jest czîowiekiem, to denise lubi darka
jest to NIE WNIOSKOWANIE, ale LOGIKA:
darek jest czîowiekiem
denise lubi ludzi
wiëc:
denise lubi darka, bo darek jest czîowiekiem, a denise lubi ludzi
jeôli ktoô/coô jest "ludzi" to denise traktuje go poprzez "lubiê"
- ZDANIA ZÎOÛONE: podziaî w myth() lub zrobiê osobnâ funkcjë wielowywoîujâcâ
- ekstrakcja informacji z bazy: co wynika z róûnych zwiâzków gramatycznych, tak
jak to byîo we wnioskowaniu przydawkowym,
- opis formalny róûnych zwiâzków logicznych, jest to LOGIKA nie wnioskowanie,
zrobiê opis formalny, A=B itp. i wprowadziê nowy moduî LOGICZNY (kontrolowaîby
zgonoôci nie-jednoznaczne bezpoôrednio)
- algorytmy ôledzenia - tj. pokazywanie drogi, która doprowadziîa do sukcesu,
czyli: wnioskowanie, logikë itp. w postaci normalnych zdaï
- jak sie nazywasz?
- NIE DZIALA: KTO ma ucznia? jeôli: darek jest uczniem andrzeja
- inteligentne tworzenie odmian na podstawie wyrazu podstawowego
- sprawdziê, czy jest sens robiê mapë cechowania faktów - analogicznie do
korelacji, ale obejmujâcej pozostaîe czasowniki okreôlajâce
- funkcja kontroli zgodnoôci z bazâ faktów dla mapy korelacji i jej kompletnoôci
- czym lubi jeúdziê karol? (przy: karol lubi jeúdziê samochodem)
- wprowadziê zaleûnoôci w tworzeniu pytania, m. in. od tematu ostatniego zdania (denise, rozmówca, czy temat?)
- sîowa tymczasowe - których zapisy moûna weryfikowaê w bazie faktów
- WAZNE: Denise na ICQ!!! Ustaliê dane personalne: polka, ale nie od urodzenia,
stâd to imie,
- ANSWER OGOLNE - czy wymagana ma byê 100% zgodnoôê wszystkiego? bo wtedy nie
byîoby sytuacji ûe np. "jakie masz oczy?" -> "mam zielone spodnie"
- MULTIUSER - moûliwoôê rozmawiamia wielu uûytkowników, jak na irc'u
- nazywasz sië denise <- nie rozumie tego
w ogóle zrobiê jakâô obsîugë wyrazów z "sië", ûeby byîo wiadomo co i jak
- lepsze zadawanie pytaï - lepszy wybór fp - taki, ûeby automatycznie okreôliê
najwiëcej pochodnych danych (wnioskowanie itp.), oraz ûeby ustaliê przynaleûnoôê
do jak najmniejszej grupy podobnych faktów
- TWIERDZENIA
- lepszy RAND()
- imiesîowy, zaimki
- pokazywanie przebiegu wnioskowania
- przepisaê obsîugi FAKTOW - od identyfikacji do wnioskowania!
- w klasyfikacji - powinno byê okreôlanie, ûe ORZECZNIK ma byê RZECZOWNIKIEM!!!
- lista podrëczna tego czym coô moûe byê, tj. faktów klasyfikacyjnych
- algorytmy postëpowania:
CEL: zbieranie szczegóîowych danych z wybranego zakresu
jeôli uûytkownik nie odpowiada na pytania szczegóîowe, to pytamy o ogólne
- nauka z pliku - np. plik, w którym zawarte sâ zdania, a ona je zapamiëtuje w
bazie faktów, np. plik ze stolicami, plik z miastami, plik z imionami (baza
fleksji, baza faktów), w ten sposób moûna by rozszerzaê bazy danych!!! LEARN
FROM FILE
- program powinien prowadziê uûytkownika, przejmowaê inicjatywë, domagaê sië od
niego informacji!!!!
- trzeba aû 2 razy uruchamiaê program, jeôli baza fleksji nie jest posortowana,
ûeby sië posortowaîa przy trybie FLEKSJA_SORT. powinno byê od razu
- jesteô stolicâ polska? <- powinno byê polskI
- przy wyjôciu z programu nagrywa status rozmowy: ile byîo odpowiedzi Elizy ile
Denise, ile wyrazów nieznanych, zdaï nielogicznych - wszystko w procentach!!!!
- tylko miasta mogâ byê stolicami <- ograniczenia co moûe byê czym!
- ciaîo
- potraktowaê caîy projekt Denise-MYTH w obecnej fazie jako interfejs
komunikacyjny i rozpoczâê konstrukcjë wîaôciwej inteligencji, nadrzëdnej do
Denise i pracujâcej na zasadzie wielowâtkowego rozwiâzywacza problemów, tak jak
to byîo opisane we wczeôniejszych fazach projektowania (podôwiadomoôê,
ôwiadomoôê itp.) - kompletnie zmodernizowaê sposób dziaîania programu,
wyodrëbniê interfejs, rozbiór zdania, fakty itp.
- zupeînie zmieniê sposób dziaîania programu: funkcje ogólne zwracajâce
strukturë np. rozbioru itp. bez zmiennych globalnych, tylko funkcje - nowy
sposób kompilacji - jakieô moduîy, PRAWDZIWE includy,
- dodanie jakoôciowej analizy skîadniowej, tj. np. jeôli jakiô wyraz nie zostaî
poprawnie odczytany, ale reszta sië zgadza, to zdanie zostaje zapisane w bazie z
jakimô prawdopodobienstwem, a zdania z malym prawdopodobienstwem wymagaja, aby
zostaly potwierdzone przez rozmowce!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- nowa analiza faktów - wnioskowanie sâsiadujâce, tj. jeôli ktoô jest
szczëôliwym czîowiekiem, to na xx% sam jest szczëôliwy w ogóle
- zastanowiê sië nad wieloplikowâ bazâ faktów - moûe jakiô podziaî? albo nauka z
plików standardowych - np. stolice krajów,
- opcja wyjaôniajâca wnioskowanie dla jednego poziomu wgîâb, tj.:
jestem czîowiekiem
czîowiek ma rëce
czy mam rëce?
-> masz rëce, bo jesteô czîowiekiem
kaûdy czîowiek ma rëce
jesteô czîowiekiem, wiëc masz rëce
- specjalny tor komunikacyjny z Elizy do Denise, tj. w elizie naleûy dodaê opcjë
$ODPOWIEDZ("denise kim jesteô") na pytania typu: "opowiedz coô o sobie" itp.
- port komunikacyjny w formie pliku - pozwala m. in. na komunikacjë innych
programów, np. program obsîugujâcy mowë, tîumaczy jâ na formë tekstowâ, a
informacjë të przekazuje po prostu Denise dogrywajâc jâ w pliku; Denise pobiera
jâ i zaleûnie od typu (np. zwykîa rozmowa) moûe wyôwietliê na ekranie, przyjâê
zupeînie jak normalnie wprowadzony tekst, czyli równieû np. wykonaê odpowiedni
rozkaz (na sygnaî MOWY!!!),
- zrozumieê o co chodzi z typami static, extern, __far
- naturalizacja wypowiedzi Denise-MYTH
- okreôlanie trwaîoôci wyrazów, tj. np. elementy, które sâ ZAWSZE prawdziwe, i
te, które moûna zmieniê w kaûdej chwili. np. jak ktoô sië czuje:
jestem zmëczony, po chwili moûe powiedzieê:
nie jestem zmëczony
wtedy jest sprawdzane, czy wyraz zmëczony jest wyrazem trwaîym, czy nie,
jeôli nie jest trwaîym, to DENISE_ZMIANA_CECHY_TYMCZASOWEJ i zmiana danych w
bazie
- rozpoznawanie trybu zdania - ROZKAZUJACE, OZNAJMUJACE, PRZYPUSZCZAJACE ***
- zrobiê zapis faktow - nie zamienia "ciebie" (ty) na "denise" a ma zamieniaê
- uruchamianie programów zewnëtrznych poprzez funkcjë KOJARZENIA, tj.:
skojarz program <nazwa_programu> z nazwâ blablabla
ma byê na 100% w jakiejô prostej chociaû formie, ale wywoîywanie programów
i ew. zwracanie tego, co wypisujâ na okno Denise, np.:
wykonaj "echo 'abc'" ma zwróciê:
program "echo" zwróciî: abc
- odpornoôê na idiotyzmy, typu zdania jednoliterkowe, itp.
- celowoôê pytaï,
- sympatia do róûnych osób,
- ocenianie tematów jako interesujâce lub nie,
- o czym z kim rozmawiaê - z rolnikiem o rolnictwie, ze studentem o szkole itp.
- wiëksza elastycznoôê w pisaniu zmiennych wewnëtrznych, np. bez nawiasów, a
koniec rozpoznawany przez odstëp, koniec wyrazu, maîâ literkë itp.
- naturalizacja pytaï Denise - np. "powiedz mi bez_imienia, czy jesteô czîowiekiem?"
tj. dodawanie fragmentów naturalizacji w pytaniach MYTH
- informacje statystyczne o tym ile razy zdanie wypisywaîa Eliza, a ile razy
Denise, oraz ile razy Denis wykorzystywaîa Elizë do tîumaczenia komentarzy
- ulepszyê sposób zadawania pytaï MYTH
- ustaliê limit, przy którym nie jest wykorzystywana ELIZA, tj. na zdania
zbyt gîupie nie ma sensu odpowiadaê, np. literówki itp.: cszeôê! <- np.
poniûej quality 50% nic nie robimy, lub korzystamy z jakiejô przystawki
mechanicznej, typu: mówisz zupeînie bezîadnie! itp.
- UWAGA! BRAK KONTROLI SKLADNI ZMIENNYCH WEWNETRZNYCH!!! <- zrobiê
- wyrazy tymczasowe, itp. np. uczucia, w bazie faktów?
- blisko_cmp jest bardzo wolne - powinna byê jakaô opcja przyôpieszajâca,
wyîâczajâca poszukiwanie wyrazów podstawowych w systemie elizy, zastanowic
sie co to wlasciwie daje?
- faworyzowanie ustawieï podstawowych odmiany w odmiana.cpp!!!
- uruchamianie trybu DENISE w róûnych momentach, np. przy tworzeniu
pytania, w odpowiadaniu, etc.
- inny sposób wywoîywania funkcji: np. rozbierz_zdanie(tresc) i zwraca coô
- w wersji pod windows nie dziaîa dodawanie wyrazów do bazy
- wersja pod windows wiesza sie po "kim ty jestes?"
- edytor bazy danych ELIZY
- wersja na AMIGE - MUI
- zrobiê wiëkszâ elastycznoôê przy inteligencji - nawet przy 100% w
niektórych miejscach moûe byê np. 90%
- dodanie rozumienia moûliwoôci: (nie) moûe byê
- rekonstrukcja programu - inny podziaî includów, osobno wnioskowanie,
lepszy sposób organizacji kodu wnioskowania, wyrazistoôê programu,
eliminacja czëôci zagmatwanych, poprawienie bîëdów,
ELIZA II:
- PYTANIE:
- format: ODPOWIEDZ{treôê pytania}
- funkcja zwraca odpowiedú typu:
- TAK (prawda) itp.
- NIE (faîsz) itp.
- jednowyrazowy element z listy w pytaniu zaimkowym
- np. ODPOWIEDZ{kto jest programistâ?} = szymon
ODPOWIEDZ{znasz szymona?} = TAK
- moûliwe jest zagnieûdûanie zmiennych, np.:
ODPOWIEDZ{lubisz $USER{P=BIERNIK}?} = TAK
- odpowiadanie na pytania w trybie skróconym: "tak","nie","mam","nie mam" itp.
// nie powinna pytaê o rzeczy o znaczeniu ogólnym - powinna byê baza
// definicji i baza aktywnej rzeczywistoôci
- testowanie bazy danych na dysku - i naprawianie
miîy programista pisze program
programista jest miîy?
piec - moûe byê wyraz podstawowy dla czasownika jak i dla rzeczownika!
konieczna dodatkowa kontrola czëôci mowy juû na poziomie odszukiwania
fleksji odmiany!!!
kontrola zaimka co/kto w odpowiedzi podmiotowej (na pytanie podmiotowe)
* * *
Rozwój bazy fleksji/faktów:
- ogólna wiedza o ôwiecie, podstawowe obiekty, prawa,
- pogaduszki, rozmowy towarzyskie,
Skîadnia.
- rozumienie takich zdan: jesteô TAKA, on jest TAM - na podstawie histori rozmowy
(np. z ostatniego zdania)
- tîumaczenie zaimków: masz mój adres?
- zaimki
- partykuîy
- wykrzykniki
- przymiotnik: niektóre nie stopniujâ sië!
- zrobiê opcje rozbioru zdania do pierwszego sukcesu
- rozbiór zdania:
- kwiat ma îadne pîatki <- ûe no co?! úle!
- masz dostëp do internetu?
- idë na trening, ale: jestem na treningu
- o czym myôlisz?
- programista pisze zielony list do kolegi
- chcesz byê mojâ dziewczynâ?
- piekarz piecze duûo chleba?
- fryzjer obcina ludziom wîosy?
- programista pisze programy palcami na klawiaturze?
- on lubi chodziê szybko? <- zîa interpretacja rozbioru logicznego
- podmiot domyôlny w l. mn. ONI sâ?
- liczebniki! ile masz lat?
- spójnik 'i'
- zapis do bazy zdania z podmiotem domyôlnym zdefiniowanym
- zastanowiê sië nad znaczeniem przypadków narzucanych
czy moûe po prostu X kompletów, czy coô takiego?
bo wyraz moûe wykorzystywaê w zdaniu dwa narzucane przypadki:
programista pisze (biernik: CO?) programy (narzëdnik: CZYM?) palcami?
? - lekarz opiekuje sië chorymi?
zastanowiê sië nad przyimkami - czy potrzebny przypadek narzucany?
Odmiana.
- odmiana grup - np. w domu - gdzie jesteô?
Pytanie.
- pytania o RDZEN: np. kto pisze program? albo kto jest miîy? lista do
wyboru, moze po przecinku, ze spojnikiem 'i'?
- zadawanie pytaï ogólnych zaimkowych oraz odpowiadanie w tym trybie,
np.: jaki jest szymon? zielony. albo: czy jesteô kobietâ? tak, jestem kobietâ.
zeby nie byîo: informacja poprawna, sprzeczna... ble...
- dodatkowe kryterium oceny tworzenia pytaï:
- jeôli pytamy o Denise (ona sië pyta o siebie), to najlepiej wychodzâ
pytania z LACZNIKAMI (jestem taka/takâ)
- *7* - ANSWER.C nie sâ obsîugiwane grupy wielowyrazowe w odpowiadaniu
- kiedy zadawaê pytania JA, a kiedy TY? tzw. punkt ciëûkoôci DENISE->ROZMÓWCA
jak to ustaliê? punkt zainteresowaï, O!
Odpowiedú.
- uwzglëdnianie odpowiedzi typu: brak danych w pytaniu zaimkowym!
- wykorzystanie umiejëtnoôci wnioskowania do odpowiadania na pytania
zaimkowe (np. jaka jesteô? czîowiek jest inteligentny - wiëc jestem
inteligentna! <- o ile w bazie nie ma zaprzeczenia of course... ;))
- JAK miîa jesteô? <- w odpowiedziach uwzglëdnianie kilku FPF!!!!!
- odpowiedú NIE WIEM
- odpowiadanie - Czy jestem gîupia? NIE JESTEÔ. etc.
- odpowiadanie naturalne - tj. czesc, czesc, witaj, etc. nie na podstawie bazy
Inne.
- wyrazy bliskoznaczne
- wyrazy przeciwstawne
- co robisz? <- wywoîuje program, który wybiera coô - rozpoznawanie
czynnoôci wykonywanych etc.
- TEORIA MAPY KORELACJI FAKTÓW
- HELP: help w przypadku, gdy nie jest rozumiane zdanie (rozbiór) -
informacje o tym, co moûna zrobiê: odmiana, formuîa, zasady etc.
- zeby nie nagrywal zdaï nie rozbitych gramatycznie, ze wzgledu na
nieokreslony podmiot domyslny JA
- return <- w funkcjach VOID!!!!
- dane o wyrazach - czy sâ trwaîe, czy tymczasowe, czy oznaczajâ stan, czy sâ
osobiste...
- ZROZUMIEC CO Z TYM CALYM TYPEM S T A T I C !!!!!!
- &&& - kod do uzupeînienia w grama!!!!
- inny sposób zapisu w bazie faktów w przypadku podmiotu domyôlnego:
musi zostaê zindentyfikowany fakt, jeôli nie - tworzona jest baza
wirtualna? albo coô?
- dodaê wspóîczynnik korelacji wszystkich faktów - sieê neuronowa
- wzajemne rodziny wyrazów - tj. "czîowiek, ryba" <- gatunki, czîowiek nie
moûe byê rybâ etc.
- dodaê moûliwoôê automatycznej nauki o danych pobocznych wyrazów, np.
ûywotny, nieûytowny, pospolity, przechodni itp.
- zrobiê opcje modyfikacji sîowa
- czîowiek moûe byê kobietâ lub mëûczyznâ <- bardzo inteligentne!
jesteô czîowiekiem, wiëc jesteô kobietâ czy mëûczyznâ?
- automatyczne rozpoznawanie pewnych czëôci mowy po podaniu wyrazu
podstawowego - bo sâ te same dla caîej rodziny!!!
- zrobiê moûliwoôê dodawania danych, których wczeôniej nie podano - np.
add word empty
oraz moûliwoôc zmieniania danych
albo zostawiê to na wersje okienkowâ
- uwzglëdnienie czasu (sâ przecieû dane o czasie zapisu informacji! - dodaê
weryfikacjë danych! i moûliwoôê nadpisu niektórych! definiowanie parametrów
dynamicznych i statycznych - tymczasowe np. emocje)
- okazywanie zainteresowania? np. Kim jesteô? A kim TY jesteô?
- zastanowiê sië nad paradoksem: jestem denise -> wtedy myôli, ze nia jestem...
- WADA: wszystko okreôlane 1 sîowem - potem gîëbokoôê dopiero
ZROBIÊ: jakieô multi definiowanie gîëbokie - ale jak????
- fakty tymczasowe:
ROZMÓWCA - zapisujemy co mówi o sobie, a jeôli go zidentyfikujemy,
to dopisujemy od razu do bazy normalnie, jeôli powstanie rdzeï, (jaki ma
byê rdzeï?!), to do bazy
DENISE - moûe coô specjalnego dla niej?
TEMAT - to samo co rozmówca - jeôli zidentyfikujemy, to do bazy,
ostatecznie - jeôli ma rdzeï, to teû do bazy,
- na pececie zwraca iloôê klonów + 100
- sortowanie bazy fleksji, bo nie jest posortowana!
- SUPER TEORIA: plik z danymi korelacji - tj. wspomagajâcy dobór faktów najbardziej
skorelowanych - coô jak sieê neuronowa, weryfikowana po kaûdym sprawdzeniu,
dziaîa trochë w ciemno, ale przyôpiesza, no i daje pewien element ryzyka,
ale dla bardzo duûych baz danych jest NIEZBËDNA i zapewnia szybkâ pracë - ogólnie
ma tworzyê mapë korelacji poszczególnych faktów - nie koniecznie wszystkich,
ale w procesie rozwoju powinna objâê wszystkie poruszane zagadnienia (tematy)
- zrobiê obsîugë sytuacji, kiedy nie jest okreôlony PODMIOT ROZMOWCA, TEMAT, DENISE!!!
co wtedy z zapisem do bazy? jakaô virtualna?!
TAK: zapisywanie w bazie jako kod ROZMOWCA lub TEMAT - normalnie w bazie faktow
z takim rdzeniem kodowym. i za kazdym razem sprawdzanie, czy mozna przeniesc
juz rozmowce do bazy - jesli mozna, to kasujemy ten fakt i przenosimy obiekty
do bazy i zmieniamy wskaznik na ten fakt - a jak nie zidentyfikujemy, to
przy wychodzeniu z programu informujemy o bezsensownych danych i kasujemy je
z bazy -> pytanie JAK IDENTYFIKOWAC ROZMOWCE/TEMAT?????
- wersja pod windows
- ustaliê wypisywanie komunikatów (view.skladnia etc.)
- przeczytaê 1 linie w pliku def.h i wykonaê
- zadawanie pytaï szczegóîowych i ogólnych
- dokoïczyê zaimki
- wyrazy bliskoznaczne i przeciwstawne
- uprzyzwoiciê wyglâd kodu programu (opis na poczâtku pliku, podziaîy etc.)
- uwzglëdnianie czasu
- uruchamianie programów
- uwzglëdnianie zabarwienia wyrazów - samopoczucie, nastrój etc.
- organizm (biorytmy, samopoczucie itp.)
- podmiot domyôlny w peînym zakresie - temporalna baza danych nieokreôlonych
- îatwiejszy sposób dodawania nowych wyrazów do bazy
- inteligencja na kaûdym poziomie - np. w rozpoznawaniu wyrazów z literówkâ
*/
#define DENISE_VERSION "4.2 (00.11)"
#ifndef PC_WIN
// AMIGA/PC_DOS jesli nie wybrano PC_WIN
#define AMIGA
#endif
// czcionki:
// AMIGA - AmigaPL
// PC_WIN - WindowsText
// PC DOS - IBM_Latin2
// * MAIN PROGRAM *
// include
#if defined(AMIGA)
#include <intuition/intuition.h>
#include <devices/console.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>
#include <clib/dos_protos.h>
#include <clib/intuition_protos.h>
#include <proto/dos.h>
#include "include/simplerexx.h"
#else
#include <dir.h>
#endif
#ifdef PC_WIN
#include <dos.h>
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#endif
#include <time.h>
#ifndef PC_WIN
#include "include/d4_def.h"
#include "include/d4_str.h"
#include "include/d4_var.h"
#include "include/d4_pro.h"
#endif
#include "include/data.cpp"
#include "include/data1.cpp"
#include "include/data2.cpp"
#include "include/data3.cpp"
#include "include/data4.cpp"
#include "include/user.cpp"
#include "include/inter.cpp"
#include "include/def_dtr.cpp"
#include "include/eliza1.cpp"
#include "include/eliza2.cpp"
#include "include/extra.cpp"
#include "include/grupa.cpp"
#include "include/natural.cpp"
#include "include/fleksja1.cpp"
#include "include/fleksja2.cpp"
#include "include/blisko.cpp"
#include "include/grama1.cpp"
#include "include/grama2.cpp"
#include "include/grama3.cpp"
#include "include/sklad.cpp"
#include "include/fakty1.cpp"
#include "include/fakty2.cpp"
#include "include/fakty3.cpp"
#include "include/fakty4.cpp"
#include "include/mapa1.cpp"
#include "include/mapa2.cpp"
#include "include/odmiana.cpp"
#include "include/quest1.cpp"
#include "include/quest2.cpp"
#include "include/answer.cpp"
#include "include/myth.cpp"
#ifdef AMIGA
void main(void)
{
main_start();
amiga_main_loop();
}
void FROM amiga_main_loop(void)
{
/*
ogólna pëtla prowadzâca (selekcji)
- pobiera wpisany ciâg i inne komendy,
- okreôla dokâd majâ byê wyprowadzane dane (okno, ARexx),
- wysyîa wszystko do myth,
*/
struct IntuiMessage *window_msg;
struct RexxMsg *rexx_msg;
ULONG signals,arexx_sig,console_sig,window_sig;
queue_read(&read_buf); /* send the first console read request */
console_sig = 1 << readPort->mp_SigBit;
window_sig = 1 << window->UserPort->mp_SigBit;
clear_sentence();
stream.priority=PRIORITY_EMPTY;
con_put_komunikat(E_DENISE_ROZMOWCA_SIE_NIE_PRZEDSTAWIL);
stream.priority=PRIORITY_EMPTY;
con_put(stream.output);
con_put_dialog(PODMIOT_ROZMOWCA,"",PRIORITY_MAX);
for (;;)
{
// body_live(); // podprogram symulujâcy funkcjonowanie organizmu
arexx_sig=ARexxSignal(denise_rexx);
signals=Wait(arexx_sig | console_sig | window_sig);
// jeôli sygnaî z klawiatury (console)
if (signals & console_sig)
{
// czy pobrano linië?
if (con_get(sentence.orig)==RESULT_OK)
{
// wysyîamy pobranâ linië do myth_main()
stream.mode=STANDARD_MODE;
stream.priority=PRIORITY_EMPTY;
myth_main();
con_put(stream.output);
if (save.talk==KOD_TRUE) save_talk(stream.output);
// przygotowanie na nastëpne zdanie
clear_sentence();
con_put_dialog(PODMIOT_ROZMOWCA,"",PRIORITY_MAX);
}
}
// jeôli sygnaî z okna
if (signals & window_sig)
{
/* We have to ReplyMsg these when done with them */
while (window_msg = (struct IntuiMessage *)GetMsg(window->UserPort))
{
if (window_msg->Class==CLOSEWINDOW)
{
ReplyMsg((struct Message *) window_msg);
con_put("\n");
safe_exit();
}
}
}
// jeôli sygnaî ARexx'a
if (signals & arexx_sig)
{
while (rexx_msg=GetARexxMsg(denise_rexx))
{
// pobieramy wiersz arexx'a
sprintf(sentence.orig,"%.*s",MAX_LINE_LENGHT-1,ARG0(rexx_msg));
con_put(UNDERLINE COLOR_03"\nport arexx:"NORMAL_TEXT ITALIC BOLD COLOR_01 " ");
con_put(sentence.orig);
con_put(NORMAL_TEXT"\n");
// wysyîamy pobranâ linië do myth_main()
stream.mode=AREXX_MODE;
stream.priority=PRIORITY_EMPTY;
myth_main();
con_put(stream.output);
if (save.talk==KOD_TRUE) save_talk(stream.output);
// wysyîamy odpowiedú do ARexx'a
ReplyARexxMsg(denise_rexx,rexx_msg,stream.arexx_output,0);
// przygotowanie na nastëpne zdanie
clear_sentence();
con_put_dialog(PODMIOT_ROZMOWCA,"",PRIORITY_MAX);
con_get(sentence.orig); // oznacza to wywoîanie po prostu starej linii
}
}
}
}
#endif
void FROM main_start(void)
{
#ifdef AMIGA
char txt[MAX_LINE_LENGHT];
#endif
clear_variable();
open_interface();
gnu_start();
config_load();
#ifdef AMIGA
con_put("\n
Denise-MYTH "DENISE_VERSION" Artificial Intelligence
");
if (denise_rexx)
{
sprintf(txt," (ARexx: %s)\n",ARexxName(denise_rexx));
con_put(txt);
}
else con_put(" (ARexx nie jest dostëpny\n");
#else
con_put("\nDenise-MYTH "DENISE_VERSION" Artificial Intelligence");
#endif
con_put("\nsprawdzenie czasu: ");
con_put(current_time());
con_put("\n");
load_data();
def_denise();
// dodatkowe informacje jeôli w bazie nie byîo danych o PODMIOCIE DENISE
if (dtr_defined(PODMIOT_DENISE)==RESULT_NO_OK) con_put("\nuwaga: brak podmiotu DENISE w bazie faktów\n");
#ifndef AMIGA
randomize(); // ûeby liczby losowe byîy bardziej losowe ;)
#endif
con_put("\n<proszë o przysyîanie WSZYSTKICH plików z katalogu TALK po rozmowie>\n");
con_put("<'help', 'first run' - pomoc>\n");
if (save.talk==KOD_TRUE) save_talk_new_session();
}
void FROM clear_variable(void)
{
#ifdef PC_WIN
windowline[0].label=Line1;
windowline[1].label=Line2;
windowline[2].label=Line3;
windowline[3].label=Line4;
windowline[4].label=Line5;
windowline[5].label=Line6;
windowline[6].label=Line7;
windowline[7].label=Line8;
windowline[8].label=Line9;
windowline[9].label=Line10;
windowline[10].label=Line11;
windowline[11].label=Line12;
windowline[12].label=Line13;
windowline[13].label=Line14;
windowline[14].label=Line15;
windowline[15].label=Line16;
windowline[16].label=Line17;
windowline[17].label=Line18;
windowline[18].label=Line19;
windowline[19].label=Line20;
windowline[20].label=Line21;
windowline[21].label=Line22;
windowline[22].label=Line23;
windowline[23].label=Line24;
windowline[24].label=Line25;
windowline[25].label=Line26;
windowline[26].label=Line27;
windowline[27].label=Line28;
windowline[28].label=Line29;
fakt_head=NULL;
mapa_head=NULL;
fleksja_head=NULL;
#endif
denise.fakt=NULL;
denise.obiekt=NULL;
denise.rodzaj=RODZAJ_ZENSKI;
rozmowca.fakt=NULL;
rozmowca.obiekt=NULL;
rozmowca.rodzaj=FLEKSJA_DOWOLNA;
sprintf(rozmowca.name,"");
temat.fakt=NULL;
temat.obiekt=NULL;
temat.rodzaj=FLEKSJA_DOWOLNA;
sprintf(eliza_memory.ost_zdanie,"");
sprintf(eliza_memory.przed_ost_zdanie,"");
eliza_memory.ost_zdanie_typ1=ZDANIE_OZNAJMUJACE;
eliza_memory.ost_zdanie_typ2=ZDANIE_TWIERDZACE;
eliza_memory.przed_ost_zdanie_typ1=ZDANIE_OZNAJMUJACE;
eliza_memory.przed_ost_zdanie_typ2=ZDANIE_TWIERDZACE;
sprintf(denise_last_say,"");
}
void FROM safe_exit(void)
{
save_talk_end_session();
#ifdef PC_WIN
wyjscieClick(Edit1);
#else
save_data();
erase_data();
con_put("\nwychodzë z programu\n");
delay(800);
#ifdef AMIGA
delay(400);
close_interface();
#endif
#ifndef PC_WIN
exit(0);
#endif
#endif
}
void FROM error_exit(char err[])
{
#ifdef PC_WIN
wyjscieClick(Edit1);
#else
printf("wystâpiî bîâd: %s\n",err);
safe_exit();
#endif
}
void FROM delay(ULONG ms)
{
clock_t old=clock();
for(;;)
{
if (clock()>CLK_TCK*ms/1000+old) break;
}
}
int FROM drand(void)
{
srand(clock());
return rand();
}
#ifdef AMIGA
int FROM min(int a,int b)
{
return a<b ? a : b;
}
int FROM max(int a,int b)
{
return a<a ? b : a;
}
#endif
char * FROM current_time(void)
{
static char date[21];
time_t t=time(NULL);
strftime(date,21,"%Y.%m.%d. %H:%M:%S",localtime(&t));
return date;
}
char * FROM create_array(char *txt,UBYTE ile)
{
UBYTE nr1;
char *mem=(char *) malloc(ile);
if (mem==NULL) return NULL;
mem[0]=(char) atoi(strtok(txt,","));
for (nr1=1;nr1<ile;nr1++)
mem[nr1]=(char) atoi(strtok(NULL,","));
return mem;
}
char * FROM create_string(char *txt,int lenght)
{
char *mem=(char *) malloc(lenght);
if (mem==NULL) return NULL;
memcpy(mem,txt,lenght-1);
mem[lenght-1]='\0';
return mem;
}
ULONG FROM file_lenght(FILE *stream)
{
ULONG size;
if (fseek(stream,0,SEEK_END)!=NULL) return 0;
size=ftell(stream);
rewind(stream);
return size;
}
char FROM pl_ascii(char znacek)
{
#if defined(AMIGA)
char pl_table[]=" aâbcêdeëfghijklîmnïoópqrsôtuvwxyzûú";
#elif defined(PC_DOS)
char pl_table[]=" aâbcêdeëfghijklîmnïoópqrsôtuvwxyzûú";
#elif defined(PC_WIN)
char pl_table[]=" aâbcêdeêfghijklîmnïoópqrsôtuvwxyzûú";
#endif
return (char) (strcspn(pl_table,&znacek) % strlen(pl_table));
}
char *FROM pl_ascii_exist(char znacek)
{
#if defined(AMIGA)
char pl_table[]=" aâbcêdeëfghijklîmnïoópqrsôtuvwxyzûú";
#elif defined(PC_DOS)
char pl_table[]=" aâbcêdeëfghijklîmnïoópqrsôtuvwxyzûú";
#elif defined(PC_WIN)
char pl_table[]=" aâbcêdeêfghijklîmnïoópqrsôtuvwxyzûú";
#endif
return strchr(pl_table,znacek);
}
char FROM sort_insert(char *txt1,char *txt2)
{
/*
funkcja sprawdza, który wyraz jest alfabetycznie pierwszy (tj. kolejnoôê w sîowniku)
zwraca:
RESULT_OK - jeôli pierwszy powinien byê txt2
RESULT_NO_OK - jeôli pierwszy powinien byê txt1
*/
UBYTE nr1;
for (nr1=0;nr1<(char) min(strlen(txt1),strlen(txt2));nr1++)
{
if (pl_ascii(txt1[nr1])>pl_ascii(txt2[nr1])) return RESULT_OK;
if (pl_ascii(txt1[nr1])<pl_ascii(txt2[nr1])) return RESULT_NO_OK;
}
if (strlen(txt1)>strlen(txt2)) return RESULT_OK;
return RESULT_NO_OK;
}
void FROM actual_status(void)
{
char txt[MAX_LINE_LENGHT*4];
#ifdef AMIGA
if (denise_rexx)
{
sprintf(txt,"port ARexx: %s\n",ARexxName(denise_rexx));
con_put(txt);
}
else con_put("port ARexx nie jest dostëpny\n");
#endif
#ifdef PC_WIN
sprintf(txt,"liczba sîów/klonów: %ld/%ld (%.3fkB)\n"
"liczba faktów/obiektów/FP: %ld/%ld/%ld (%.3fkB)\n"
"wspóîczynnik inteligencji: %d%%",
fleksja_count(),fleksja_count_klony(),(float) fleksja_memory_use()/1024,
fakty_count(),fakty_count_obiekt(NULL),
fakty_count_simple(MODE_FP,NULL,NULL),(float) fakty_memory_use()/1024,
intelligence);
ShowMessage(txt);
#else
sprintf(txt,"liczba sîów/klonów: %ld/%ld (%.3fkB)\n",
fleksja_count(),fleksja_count_klony(),(float) fleksja_memory_use()/1024);
con_put(txt);
sprintf(txt,"liczba faktów/obiektów/FP: %ld/%ld/%ld (%.3fkB)\n",
fakty_count(),fakty_count_obiekt(NULL),
fakty_count_simple(MODE_FP,NULL,NULL),(float) fakty_memory_use()/1024);
con_put(txt);
sprintf(txt,"liczba orzeczników/podrzëdnych/okreôlanych w mapie korelacji: %ld/%ld/%ld (%.3fkB)\n",
mapa_count_grupy(),mapa_count_podrzedne(),mapa_count_okreslane(),(float) mapa_memory_use()/1024);
con_put(txt);
sprintf(txt,"liczba pozycji/wejôê/wyjôê: %ld/%ld/%ld (%.3fkB)\n",
eliza_count(),eliza_count_ident(),eliza_count_funkc(),(float) eliza_memory_use()/1024);
con_put(txt);
sprintf(txt,"inteligencja: %d%%\n",intelligence);
con_put(txt);
switch (mode)
{
case MODE_USER: con_put("mode USER\n"); break;
case MODE_SUPERVISOR: con_put("mode SUPERVISOR\n"); break;
}
switch (stream.line)
{
case SINGLELINE: con_put("tryb SINGLELINE\n"); break;
case MULTILINE: con_put("tryb MULTILINE\n"); break;
}
switch (denise_mode)
{
case KOD_TRUE: con_put("Denise-MYTH ON\n"); break;
case KOD_FALSE: con_put("Denise-MYTH OFF\n"); break;
}
switch (eliza_mode)
{
case KOD_TRUE: con_put("Eliza ON\n"); break;
case KOD_FALSE: con_put("Eliza OFF\n"); break;
}
switch (deep_identify)
{
case KOD_TRUE: con_put("wnioskowanie ON\n"); break;
case KOD_FALSE: con_put("wnioskowanie OFF\n"); break;
}
switch (save.nieznane)
{
case KOD_TRUE: con_put("save nieznane ON\n"); break;
case KOD_FALSE: con_put("save nieznane OFF\n");
}
switch (save.nielog)
{
case KOD_TRUE: con_put("save nielog ON\n"); break;
case KOD_FALSE: con_put("save nielog OFF\n");
}
switch (save.talk)
{
case KOD_TRUE: con_put("save rozmowa ON\n"); break;
case KOD_FALSE: con_put("save rozmowa OFF\n");
}
switch (save.odmiana)
{
case KOD_TRUE: con_put("save odmiana ON\n"); break;
case KOD_FALSE: con_put("save odmiana OFF\n");
}
#endif
}
void FROM change_intelligence(void)
{
#ifdef PC_WIN
ButtonInteligencjaClick(Edit1);
#else
char temp[MAX_LINE_LENGHT],busy[MAX_LINE_LENGHT];
if (mode==MODE_USER)
{
con_put("zmiany inteligencji sâ moûliwe tylko w trybie SUPERVISOR\n");
return;
}
con_put("wartoôê (0-100): ");
con_get_line(temp);
make_busy(temp,busy);
if (strlen(busy)==0)
{
con_put("operacja przerwana\n");
return;
}
if (!isdigit(busy[0]))
{
con_put("bîâd: uûyto zîych znaków - nie sâ to cyfry\n");
return;
}
if (atoi(busy)>=0 && atoi(busy)<=100)
intelligence=atoi(busy);
else
con_put("bîâd: podano zîâ wartoôê wspóîczynnika inteligencji\n");
#endif
}
void FROM config_load(void)
{
FILE *file;
char result=RESULT_OK;
#ifdef PC_WIN
if ((file=data_open(CONFIG_WINDOW_FILE TYPE_DAT,"r"))!=NULL)
{
// wczytywanie danych z pliku
if (fscanf(file,"%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c\n",
&windowline[0].typ,&windowline[1].typ,&windowline[2].typ,&windowline[3].typ,
&windowline[4].typ,&windowline[5].typ,&windowline[6].typ,&windowline[7].typ,
&windowline[8].typ,&windowline[9].typ,&windowline[10].typ,&windowline[11].typ,
&windowline[12].typ,&windowline[13].typ,&windowline[14].typ,&windowline[15].typ,
&windowline[16].typ,&windowline[17].typ,&windowline[18].typ,&windowline[19].typ,
&windowline[20].typ,&windowline[21].typ,&windowline[22].typ,&windowline[23].typ,
&windowline[24].typ,&windowline[25].typ,&windowline[26].typ,&windowline[27].typ,
&windowline[28].typ)==29)
con_put("preferencje okna wyôwieltania poprawnie odczytane\n");
else
{
con_put("nie mogë odczytaê ustawieï okna wyôwietlania - bîëdny plik\n");
result=RESULT_NO_OK;
}
}
else
result=RESULT_NO_OK;
if (result==RESULT_NO_OK)
{
con_put("przyjmujê ustawienia domyôlne\n");
// default config
for (char nr=0;nr<28;nr++)
windowline[nr].typ=LINE_TALK;
result=RESULT_OK;
}
win_console_redraw();
#endif
if ((file=data_open(CONFIG_FILE TYPE_DAT,"r"))!=NULL)
{
// wczytywanie danych z pliku
if (fscanf(file,"%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c\n",
&intelligence,&fast_mode,&compare_mode,&sentence_filter,&deep_identify,
&mode,&eliza_mode,&denise_mode,&stream.line,
&save.odmiana,&save.nieznane,&save.nielog,&save.talk,
&view.fleksja,&view.grupa,&view.skladnia,&view.fakt,&view.pytanie,
&view.odpowiedz,&view.odmiana,&view.wnioskowanie,&view.eliza,&view.info)==23)
con_put("preferencje programu poprawnie odczytane\n");
else
{
con_put("nie mogë odczytaê preferencji programu - bîëdny plik\n");
result=RESULT_NO_OK;
}
fclose(file);
}
else
result=RESULT_NO_OK;
if (result==RESULT_NO_OK)
{
con_put("przyjmujë ustawienia domyôlne\n");
// default config
view.fleksja=KOD_FALSE;
view.grupa=KOD_FALSE;
view.skladnia=KOD_FALSE;
view.fakt=KOD_FALSE;
view.pytanie=KOD_FALSE;
view.odpowiedz=KOD_FALSE;
view.odmiana=KOD_FALSE;
view.wnioskowanie=KOD_FALSE;
view.eliza=KOD_FALSE;
view.info=KOD_FALSE;
save.odmiana=KOD_TRUE;
save.nieznane=KOD_TRUE;
save.nielog=KOD_TRUE;
save.talk=KOD_TRUE;
fast_mode=KOD_TRUE;
compare_mode=KOD_TRUE;
deep_identify=KOD_TRUE;
sentence_filter=KOD_TRUE;
denise_mode=KOD_TRUE;
eliza_mode=KOD_TRUE;
mode=MODE_USER;
stream.line=SINGLELINE;
intelligence=100;
}
#ifdef PC_WIN
set_menu_items();
set_panel_items();
#endif
}
void FROM config_save(void)
{
FILE *file;
#ifdef PC_WIN
if ((file=data_open(CONFIG_WINDOW_FILE TYPE_DAT,"w"))!=NULL)
{
if (fprintf(file,"%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c\n",
windowline[0].typ,windowline[1].typ,windowline[2].typ,windowline[3].typ,
windowline[4].typ,windowline[5].typ,windowline[6].typ,windowline[7].typ,
windowline[8].typ,windowline[9].typ,windowline[10].typ,windowline[11].typ,
windowline[12].typ,windowline[13].typ,windowline[14].typ,windowline[15].typ,
windowline[16].typ,windowline[17].typ,windowline[18].typ,windowline[19].typ,
windowline[20].typ,windowline[21].typ,windowline[22].typ,windowline[23].typ,
windowline[24].typ,windowline[25].typ,windowline[26].typ,windowline[27].typ,
windowline[28].typ)<0)
con_put("bîâd: nie mogë zapisaê ustawieï okna wyôwietlania\n");
else
con_put("preferencje okna wyswietlania zostaîy zapisane\n");
fclose(file);
}
#endif
if ((file=data_open(CONFIG_FILE TYPE_DAT,"w"))==NULL) return;
if (fprintf(file,"%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c,%c\n",
intelligence,fast_mode,compare_mode,sentence_filter,deep_identify,
mode,eliza_mode,denise_mode,stream.line,
save.odmiana,save.nieznane,save.nielog,save.talk,
view.fleksja,view.grupa,view.skladnia,view.fakt,view.pytanie,
view.odpowiedz,view.odmiana,view.wnioskowanie,view.eliza,view.info)<0)
con_put("bîâd: nie mogë zapisaê danych\n");
else
con_put("preferencje programu zostaîy zapisane\n");
fclose(file);
}
void FROM help(void)
{
con_put("\nDenise-MYTH "DENISE_VERSION" Artificial Intelligence ("__DATE__")");
con_put("\n\nquit, about - wyjôcie z programu, informacje o programie\n");
con_put("gnu pl - informacje poczâtkowe w jëzyku polskim\n");
con_put("first run - waûne uwagi na starcie\n");
con_put("add/delete word - dodanie/kasowanie sîowa\n");
con_put("word info, actual status - informacje o sîowie, bazach\n");
con_put("check/repair ascii/dane/eliza - kontrola i naprawa danych\n");
con_put("fakty learn - nauka faktów z plików: fakt1.dat, fakt2.dat...\n");
con_put("fleksja optimize - optymalizacja bazy fleksji\n");
con_put("fleksja load/save - wczytuje/zapisuje bazë fleksji\n");
con_put("fast mode on/off, compare mode on/off - tryby rozbioru zdania\n");
con_put("sentence filter on/off - filtr wtrâceï\n");
con_put("deep identify on/off - wnioskowanie\n");
con_put("denise mode on/off - tryb Denise-MYTH\n");
con_put("eliza mode on/off - podprogram ELIZA\n");
con_put("mode user/supervisor - tryb pracy\n");
con_put("stream singleline/multiline - liczba linii wyjôciowych\n");
con_put("change intelligence - wspóîczynnik inteligencji\n");
con_put("save/load config - zapis/odczyt konfiguracji\n");
con_put("save odmiana/nieznane/nielog/rozmowa on/off\n");
con_put("view fleksja/grupa/skladnia/fakt/pytanie/odpowiedz on/off\n");
con_put("view odmiana/wnioskowanie/eliza/info on/off\n");
}
void FROM first_run(void)
{
con_put("\npierwsze uruchomienie programu:\n");
con_put("- gdy baza faktów jest niepeîna, to Denise moûe nie wiedzieê kim jest,\n");
con_put(" naleûy wtedy wpisaê 'jesteô denise'\n");
con_put("- zawsze gdy zaczynasz rozmowë przedstaw sië - tego wymaga kultura,\n");
con_put(" oraz Denise do identyfikacji, np. 'jestem szymon'\n");
con_put("- program rozróûnia duûe i maîe znaki - proszë uûywaê maîych liter\n\n");
}
void FROM about(void)
{
#ifdef PC_WIN
oprogramieClick(Edit1);
#else
con_put("\nDenise-MYTH "DENISE_VERSION" Artificial Intelligence ("__DATE__" - "__TIME__")");
con_put("\n\nSzymon Jessa, Warszawska 20/6, 89-600 Chojnice\n");
con_put("email: smoczek@ue.eti.pg.gda.pl\n");
con_put("homepage: www.ue.eti.pg.gda.pl/~smoczek\n");
con_put("download: www.jok.pl/on-line/informatyka/index.shtml\n");
con_put("download: aminet: misc/sci\n\n");
#endif
}
void FROM gnu_start(void)
{
con_put("\n* Copyright (C) 2000 Szymon Jessa\n");
con_put("* This program is free software; you can redistribute it and/or modify\n");
con_put("* it under the terms of the GNU General Public License as published by\n");
con_put("* the Free Software Foundation; either version 2 of the License, or\n");
con_put("* (at your option) any later version.\n");
con_put("* This program is distributed in the hope that it will be useful,\n");
con_put("* but WITHOUT ANY WARRANTY; without even the implied warranty of\n");
con_put("* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n");
con_put("* GNU General Public License for more details.\n");
con_put("* You should have received a copy of the GNU General Public License\n");
con_put("* along with this program; if not, write to the Free Software\n");
con_put("* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\n");
}
void FROM gnu_start_pl(void)
{
con_put("\n* Copyright (C) 2000 Szymon Jessa\n");
con_put("* Niniejszy program jest oprogramowaniem wolnodostëpnym; moûesz go rozprowadzaê\n");
con_put("* dalej i/lub modyfikowaê na warunkach Powszechnej Licencji Publicznej GNU,\n");
con_put("* wydanej przez Fundacjë Wolnodostëpnego Oprogramowania - wedîug wersji 2-giej tej\n");
con_put("* Licencji lub którejô z póúniejszych wersji.\n");
con_put("* Niniejszy program rozpowszechniany jest z nadziejâ, iû bëdzie on uûyteczny -\n");
con_put("* jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyôlnej gwarancji PRZYDATNOÔCI\n");
con_put("* HANDLOWEJ albo PRZYDATNOÔCI DO OKREÔLONYCH ZASTOSOWAÏ. W celu uzyskania\n");
con_put("* bliûszych informacji - Powszechna Licencja Publiczna GNU.\n");
con_put("* Z pewnoôciâ wraz z niniejszym programem otrzymaîeô teû egzemplarz Powszechnej\n");
con_put("* Licencji Publicznej GNU; jeôli nie - napisz do Free Software Foundation, Inc.,\n");
con_put("* 675 Mass Ave, Cambridge, MA 02139, USA.\n\n");
}